<?php
declare (strict_types = 1);

namespace app\command;

use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use think\facade\Cache;
use think\facade\Log;

/**
 * 拉取存档记录到本地数据库 一分钟一次
 * Class PullMsgLst
 * @package app\command
 */
class PullMsgLst extends Command
{
    protected function configure()
    {
        //指令配置
        $this->setName('pullmsglst')
            ->setDescription('pull msglog from wework service');
    }

    protected function execute(Input $input, Output $output)
    {
//        Cache::set('is_pullmsglst',false,3600);
        //做重复任务校验。即执行前校验执行标志，执行过程中设置执行标志，执行完毕后恢复标志。
        if(Cache::get('is_pullmsglst') !== true || !Cache::get('is_pullmsglst')){
            try {
                Cache::set('is_pullmsglst',true,0);
                $pullMsg = app()->invoke(['app\msgapi\service\HuihuaMsgService','pullMsg']);
                $pullMsg ? Log::write('[会话拉取]任务执行成功','info') : Log::write('[会话拉取]任务执行失败','error');
                $pullMsg ? $output->writeln('[会话拉取]任务执行成功') : $output->writeln('[会话拉取]任务执行失败');
                Cache::set('is_pullmsglst',false,0);
            }catch (\Exception $e){
                Cache::set('is_pullmsglst',false,0);
                Log::write('[会话拉取]任务执行失败,'.$e->getMessage().$e->getLine(),'error');
                $output->writeln('[会话拉取]任务执行失败,'.$e->getMessage().$e->getLine());
            } finally {
                Cache::set('is_pullmsglst',false,0);
            }
        }else{
            Log::write('[会话拉取]程序已在执行中,请等待执行完成.','error');
            $output->writeln('[会话拉取]程序已在执行中,请等待执行完成.');
        }
    }

}